package gob.osinerg.emergencia.action;

import gob.osinerg.emergencia.bean.ActividadBean;
import gob.osinerg.emergencia.bean.EnfermedadProfesional;
import gob.osinerg.emergencia.bean.EnfermedadProfesionalDetalle;
import gob.osinerg.emergencia.bean.FormularioEmergenciaUnmay;
import gob.osinerg.emergencia.bean.Incidente;
import gob.osinerg.emergencia.bean.UnidadOperativaBean;
import gob.osinerg.emergencia.bean.UsuarioBean;
import gob.osinerg.emergencia.form.AccidenteLeveForm;
import gob.osinerg.emergencia.form.EnfermedadProfesionalForm;
import gob.osinerg.emergencia.form.IncidenteForm;
import gob.osinerg.emergencia.service.EnfermedadProfesionalService;
import gob.osinerg.emergencia.service.GenericService;
import gob.osinerg.emergencia.util.Report;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.util.ResourceUtils;

public class EnfermedadProfesionalAction extends GenericAction {

	private Log log = LogFactory.getLog(EnfermedadProfesionalAction.class);

	private EnfermedadProfesionalService service;
	private GenericService genericService;

	public ActionForward inicio(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {

		EnfermedadProfesionalForm form = (EnfermedadProfesionalForm) actionForm;
		form.setBean(new EnfermedadProfesional());
		form.getMapList().put("anioList",
				gob.osinerg.emergencia.util.Converter.getListaAnnos());
		form.setDetalleList(new ArrayList());
		form.getDetalleList().add(new EnfermedadProfesionalDetalle());

		return actionMapping.findForward("inicio");
	}

//	public ActionForward getEnfermedadProfesionalDetalle(ActionMapping actionMapping,
//			ActionForm actionForm, HttpServletRequest request,
//			HttpServletResponse response) throws java.lang.Exception {
//
//		EnfermedadProfesionalForm form = (EnfermedadProfesionalForm) actionForm;
//
//		HttpSession session = request.getSession();
//		
//		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
//				.getAttribute("UnidadOperativaBean");		
//		
//		EnfermedadProfesional bean = (EnfermedadProfesional) form.getBean();
//		
//		EnfermedadProfesional enfermedad = new EnfermedadProfesional();
//		enfermedad.setAnio(bean.getAnio());
//		enfermedad.setSemestre(bean.getSemestre());
//		enfermedad.setIdUnidadOperativa(Long.valueOf(unidadOperativa.getCodigo()));
//		
//		List list = genericService.getFindCriteria(enfermedad);
//		
//		if(!list.isEmpty()){
//			form.setBean(list.get(0));
//			Long idEnfermedadProfesional = ((EnfermedadProfesional)(list.get(0))).getId();
//			EnfermedadProfesionalDetalle detalle = new EnfermedadProfesionalDetalle();
//			detalle.setIdEnfermedadProfesional(idEnfermedadProfesional);
//			form.setDetalleList(genericService.getFindCriteria(detalle)); 
//		}else{
//
//			form.setBean(enfermedad);
//			form.setDetalleList(new ArrayList()); 
//			form.getDetalleList().add(new EnfermedadProfesionalDetalle());
//		}
//
//		return actionMapping.findForward("inicio");
//	}
	
	public ActionForward doSave(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {
		Date fechaActual = new Date();
		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		String cadenaFecha = formato.format(fechaActual);
		EnfermedadProfesionalForm form = (EnfermedadProfesionalForm) actionForm;
		FormularioEmergenciaUnmay beanform = new FormularioEmergenciaUnmay();
		String message = "messages.insert.successful";
		try {
			EnfermedadProfesional bean = (EnfermedadProfesional) form.getBean();

			HttpSession session = request.getSession();
			UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
					.getAttribute("UnidadOperativaBean");
			UsuarioBean usuario = (UsuarioBean) session
					.getAttribute("UsuarioBean");

			ActividadBean actividad=(ActividadBean)session.getAttribute("ActividadBean");

			Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());
			
			beanform.setUniopeId(idUnidadOperativa);
			beanform.setCdgoOsinerg(unidadOperativa.getCodigoOsinerg());
			beanform.setRegistroDgh(unidadOperativa.getCodigoDGH());
			beanform.setFrmlarioId(new Long(10));
			beanform.setTpoEmrgncia("EPR");
			beanform.setEstado("GE");
			beanform.setMdioInfrmtvo("SEM");
			beanform.setActiviId(new Long(actividad.getCodigo()));
			beanform.setStrFecha(cadenaFecha);
			beanform.setUsrioCrdor(usuario.getCodigoLogin());
			beanform.setFchaCrcion(new Date());
			
			bean.setIdUnidadOperativa(idUnidadOperativa);
			bean.setUsrioCrdor(usuario.getCodigoLogin());
			bean.setFchaCrcion(new Date());
			
			form.setAnio(bean.getAnio());
			form.setSemestre(bean.getSemestre());
	

			service.save(bean, form.getDetalleList(), beanform);
			sendSuccessfulMessage(request, message);
		} catch (Exception ex) {
//			log.error(ex.getMessage());
			ex.printStackTrace();
//			message = "errors.update.failed.finalParam";
//			throw new Exception(ex.getMessage());
		}

		return actionMapping.findForward("inicio");
	}

	public ActionForward doAddDetalle(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {

		EnfermedadProfesionalForm form = (EnfermedadProfesionalForm) actionForm;
		form.getDetalleList().add(new EnfermedadProfesionalDetalle());

		return actionMapping.findForward("inicio");
	}
	
	public ActionForward doDeleteDetalle(ActionMapping actionMapping,
			ActionForm actionForm, HttpServletRequest request,
			HttpServletResponse response) throws java.lang.Exception {

		EnfermedadProfesionalForm form = (EnfermedadProfesionalForm) actionForm;

		int indexDetalle = Integer.valueOf(request.getParameter("indexDetalle")).intValue();
		List detalleList = form.getDetalleList();
		if(detalleList.size() > 1){
			detalleList.remove(indexDetalle);
		}
		return actionMapping.findForward("inicio");
	}	
	
    public ActionForward exportar(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
    	
    	EnfermedadProfesionalForm form = (EnfermedadProfesionalForm)actionForm;

    	try{
            request.setAttribute("actionReport","reporteEnfermedadProfesional.do");
            
            HttpSession session = request.getSession();
    		UnidadOperativaBean unidadOperativa = (UnidadOperativaBean) session
    				.getAttribute("UnidadOperativaBean");

    		Long idUnidadOperativa = Long.valueOf(unidadOperativa.getCodigo());        
    		String anio = (form.getAnio().toString()).equals("0") ? null : form.getAnio().toString();
    		String semestre = (form.getSemestre().toString()).equals("0") ? null : form.getSemestre().toString();    		
    		String formatoReporte = request.getParameter("formatoReporte");
    		
            Map parameters = new HashMap();
            parameters.put("UNIOPE_ID", idUnidadOperativa.toString());
            parameters.put("ANIO", anio);
            parameters.put("SEMESTRE", semestre);
            parameters.put("REGISTRO_DGH", unidadOperativa.getCodigoDGH());            
            parameters.put("IMAGE_LOGO", request.getRequestURL().substring(0, request.getRequestURL().lastIndexOf("/"))+"/images/logo_home.jpg");

            File archivo = ResourceUtils.getFile("classpath:gob/osinerg/emergencia/resource/jrxml/ReporteEnfermedadProfesional.jrxml");

    		Report report = new Report();
    		report.setJasperReport(archivo);
    		report.setParameter(parameters);
    		report.setConnection(genericService.getConnection());
    		
    		if(formatoReporte.equals("PDF")){
			report.PDF(request, response);   		
    		}else{
            	response.setHeader("Content-Disposition", "inline; filename=ReporteEnfermedadProfesional.xls");
            	report.XLS(request, response, Boolean.TRUE);      			
    		}   		
    	}catch(Exception ex){
    		log.error(ex.getMessage());
    	}
        return null;
    }	
	
	
	
	public void setGenericService(GenericService genericService) {
		this.genericService = genericService;
	}

	public void setService(EnfermedadProfesionalService service) {
		this.service = service;
	}

}
